﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static void getUsuarioXObjetos( ObjetoVO objetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdUsuario, IdObjeto, Visivel, Habilitado ");
            query.AppendLine("FROM usuarioxobjeto ");
            query.AppendLine("WHERE IdObjeto = ?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdObjeto", objetoVO.idObjeto);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                objetoVO.usuarioXObjetoVOs.Clear();

                while (reader.Read())
                {
                    UsuarioxObjetoVO usuarioxObjetoVO = UsuarioxObjetoVO.CreateUsuarioxObjetoVO();
                    usuarioxObjetoVO.idUsuario = reader.GetInt32("IdUsuario");
                    usuarioxObjetoVO.idObjeto = reader.GetInt32("IdObjeto");
                    usuarioxObjetoVO.visivel = reader.GetBoolean("Visivel");
                    usuarioxObjetoVO.habilitado = reader.GetBoolean("Habilitado");

                    objetoVO.usuarioXObjetoVOs.Add(usuarioxObjetoVO);
                }
                reader.Close();
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }
        public static void getUsuarioXObjetos(UsuarioVO usuarioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdUsuario, IdObjeto, Visivel, Habilitado ");
            query.AppendLine("FROM usuarioxobjeto ");
            query.AppendLine("WHERE IdUsuario = ?IdUsuario ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdUsuario", usuarioVO.idUsuario);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                usuarioVO.usuarioXObjetoVOs.Clear();

                while (reader.Read())
                {
                    UsuarioxObjetoVO usuarioxObjetoVO = UsuarioxObjetoVO.CreateUsuarioxObjetoVO();
                    usuarioxObjetoVO.idUsuario = reader.GetInt32("IdUsuario");
                    usuarioxObjetoVO.idObjeto = reader.GetInt32("IdObjeto");
                    usuarioxObjetoVO.visivel = reader.GetBoolean("Visivel");
                    usuarioxObjetoVO.habilitado = reader.GetBoolean("Habilitado");

                    usuarioVO.usuarioXObjetoVOs.Add(usuarioxObjetoVO);
                }
                reader.Close();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setUsuarioXObjetos(List<UsuarioxObjetoVO> usuarioxObjetoVOs)
        {
            foreach (UsuarioxObjetoVO usuarioxObjetoVO in usuarioxObjetoVOs)
            {
                setUsuarioXObjeto(usuarioxObjetoVO);
            }
        }

        public static void setUsuarioXObjeto(UsuarioxObjetoVO usuarioxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE usuarioxobjeto ");
            query.AppendLine("SET Visivel=?Visivel, Habilitado=?Habilitado ");
            query.AppendLine("WHERE IdUsuario=?IdUsuario and IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdUsuario", usuarioxObjetoVO.idUsuario);
            cmd.Parameters.AddWithValue("?IdObjeto", usuarioxObjetoVO.idObjeto);
            cmd.Parameters.AddWithValue("?Visivel", usuarioxObjetoVO.visivel);
            cmd.Parameters.AddWithValue("?Habilitado", usuarioxObjetoVO.habilitado);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void newUsuarioXObjetos(List<UsuarioxObjetoVO> usuarioxObjetoVOs)
        {
            foreach (UsuarioxObjetoVO usuarioxObjetoVO in usuarioxObjetoVOs)
            {
                newUsuarioXObjeto(usuarioxObjetoVO);
            }
        }

        public static long newUsuarioXObjeto(UsuarioxObjetoVO usuarioxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO usuarioxobjeto ");
            query.AppendLine("SET IdUsuario=?IdUsuario, IdObjeto=?IdObjeto, Visivel=?Visivel, Habilitado=?Habilitado ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdUsuario", usuarioxObjetoVO.idUsuario);
            cmd.Parameters.AddWithValue("?IdObjeto", usuarioxObjetoVO.idObjeto);
            cmd.Parameters.AddWithValue("?Visivel", usuarioxObjetoVO.visivel);
            cmd.Parameters.AddWithValue("?Habilitado", usuarioxObjetoVO.habilitado);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delUsuarioXObjetos(List<UsuarioxObjetoVO> usuarioxObjetoVOs)
        {
            foreach (UsuarioxObjetoVO usuarioxObjetoVO in usuarioxObjetoVOs)
            {
                delUsuarioXObjeto(usuarioxObjetoVO);
            }
        }
        public static void delUsuarioXObjeto(UsuarioxObjetoVO usuarioxObjetoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM usuarioxobjeto ");
            query.AppendLine("WHERE IdUsuario=?IdUsuario and IdObjeto=?IdObjeto ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdUsuario", usuarioxObjetoVO.idUsuario);
            cmd.Parameters.AddWithValue("?IdObjeto", usuarioxObjetoVO.idObjeto);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
